<?php 

class DB extends PDO {

    private $engine;
	private $host;
	private $database;
	private $user;
    private $pass;
	
	public function __construct(){
        $this->engine = 'mysql';
        $this->host = 'localhost';
        $this->database = 'test';
        $this->user = 'root';
        $this->pass = '';
        $dns = $this->engine.':dbname='.$this->database.";host=".$this->host;
        parent::__construct( $dns, $this->user, $this->pass );
    }
			
	public function insert($table, $hash) {
	  $keys = join(', ', array_keys($hash));
	  $values = array_values($hash);
	  $q = self::generatePlaceHolders(sizeof($hash));
	  $sql = "INSERT INTO $table ($keys) VALUES ($q)";
	  $this->prepare($sql)->execute($values);
	}
	
	static public function generatePlaceHolders($count) {
  		return join(', ', array_fill(0, $count, '?'));
 	}
	 	    
 	public function find($table,$pole,$pole2,$where){
		$sql=$this->query("SELECT $pole FROM $table WHERE $pole2='$where'")->fetchALL(PDO::FETCH_ASSOC);
		
		return $sql;
	}
	
	public function sel($table){
		$sql=$this->query("SELECT count(1) FROM $table")->fetchALL(PDO::FETCH_NUM);
		return $sql;
	}
	
	public function sel_limit($table, $start,$per_page){
		$sql=$this->query("SELECT * FROM $table LIMIT $start,$per_page")->fetchALL(PDO::FETCH_ASSOC);
		return $sql;
	}
	
	public function findALL($table){
		$sql=$this->query("SELECT * FROM $table")->fetchALL(PDO::FETCH_ASSOC);
		return $sql;
	}
	
	public function update ($table,$hash,$pole,$pk){
		$keys = join(', ', array_keys($hash));
	  	$values = array_values($hash);
	  	$q = self::generatePlaceHolders(sizeof($hash));
	 	foreach($hash as $key=>$val){
			$set[] = "$key = ?";
			$vals[] = $val;
		}
	  	$sql = "UPDATE $table SET  ".join(",",$set)."  WHERE $pole = ?";
 		$vals[] = $pk;
		$this->prepare($sql)->execute($vals);
	}
	public function generateCode($length=6) { 
	    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789"; 
	    $code = ""; 
	    $clen = strlen($chars) - 1;   
	    while (strlen($code) < $length) { 
	            $code .= $chars[mt_rand(0,$clen)];   
	    } 
	    return $code; 
	} 
}
class PROV{
		
		public function full() {
			$error="Ошибка:<br>";
			$login=$_POST["login"]; 
			$fam=$_POST["familia"]; 
			$name=$_POST["name"];
			$email=$_POST["email"];
			$pass=$_POST["pass"];
						
			if(strlen($login)==0)
				{$error.="вы не ввели логин <br>";
				}
			if(!preg_match("/^[a-zA-Z0-9]+$/",$login)) 
			    {$error.= "Логин может состоять только из букв английского алфавита и цифр <br>"; 
			    } 
			    if(strlen($login) < 3 or strlen($login) > 30) 
			    {$error.= "Логин должен быть не меньше 3-х символов и не больше 30<br>"; 
			    } 
			if(strlen($fam)==0)
				{$error.="вы не ввели фамилию <br>";
				}
			if(strlen($name)==0)
				{$error.="вы не ввели имя<br>";
				}
			if(strlen($email)==0)
				{$error.="вы не ввели e-mail<br>";
				}
			if(strlen($pass)==0)
				{$error.="вы не ввели пароль <br>";
				$_POST["pass"]="123";
				}
			if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
	  			$error.="неверный email <br>";
				}
			if(!preg_match("/^[a-zA-Z0-9]+$/",$pass)) 
			    {$error.= "Пароль может состоять только из букв английского алфавита и цифр <br>"; 
			    } 
			if(strlen($pass) < 3 or strlen($pass) > 30) 
			    {$error.= "Пароль должен быть не меньше 3-х символов и не больше 30<br>"; 
			    } 
			if($error!="Ошибка:<br>")
				{print "<br><br>$error "; 
				}
			else 
				{
				 $pass = md5($pass); 
				 $user=array ("login"=>"$login","familia"=>"$fam", "name"=>"$name", "email"=>"$email", "password"=>"$pass");
				 return $user;
				}
		}
	}
	


?>
